package com.dwy2002.pojo.vo.rooms;

import com.dwy2002.pojo.po.base.BaseEntity;
import com.dwy2002.pojo.vo.UnavailableDatesVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 包间返回类
 *
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/02/11
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class RoomsVO extends BaseEntity {
    /**
     * 包间名称
     */
    private String roomName;

    /**
     * 包间类型：大厅=0、茶室=1、包间=2
     */
    private Integer roomType;

    /**
     * 包间描述信息（如设施等）
     */
    private String description;

    /**
     * 座位的数量
     */
    private Integer seatingCapacity;

    /**
     * 包间费用（按小时或按天计费）
     */
    private BigDecimal fee;

    /**
     * 包间当前状态：空=0、已预约=1、取消预约=2
     */
    private Integer status;

    /**
     * 包间是否可用（某天不可预约时设置为 FALSE,默认true）
     */
    private Boolean isAvailable;
    /**
     * 包间封面图片
     */
    private String image;
    /**
     * 产品创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8", shape = JsonFormat.Shape.STRING)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)        // 反序列化
    @JsonSerialize(using = LocalDateTimeSerializer.class)        // 序列化
    private LocalDateTime createdAt;
    /**
     * 产品信息更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8", shape = JsonFormat.Shape.STRING)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)        // 反序列化
    @JsonSerialize(using = LocalDateTimeSerializer.class)        // 序列化
    private LocalDateTime updatedAt;
    /**
     * 包间图片集合
     */
    private List<RoomImageVO> roomImages;
    /**
     * 代表不可用日期集合
     */
    private List<UnavailableDatesVO> unavailableDates;
}
